
import Constant from './Constant'
import PhuketApi from '@/api/process/phuket'

let renderers = {} // 渲染信息集合
let palettes = {} // 调色板信息集合
let incomings = {} // 进度限制集合
let outgoings = {} // 出度限制集合
let options = [] // 选择框信息集合
let configs = {} // 配置信息集合

/**
 * 初始化
 */
export function init(baseApi) {
  renderers = {}
  palettes = {}
  incomings = {}
  outgoings = {}
  options = []
  configs = {}
  // 获取Stage信息集
  PhuketApi.getStages().then(items => {
    console.log('getStages', items)
    const stages = {}
    for (const key in items) {
      const item = items[key]
      if (key && key.length > 0 && item.type) {
        stages[key] = {
          type: item.type,
          group: item.group,
          name: item.label,
          title: item.description,
          imageUrl: item.icon ? baseApi + '/' + item.icon : null
        }
      }
    }
    const types = {} // 类型集合
    const groups = {} // 分组集合
    for (const key in stages) {
      const item = stages[key]
      const type = item.type ? item.type : Constant.TYPE_PROCESSOR
      const group = item.group ? item.group : 'BASE'
      const name = item.name
      const title = item.title
      // 渲染图片的路径，如果是网络资源可以不使用require方法。如果是本地路径则需要require方法
      const imageUrl = item.imageUrl
        ? item.imageUrl
        : require('@/assets/phuket/image/task.png') // 默认的图标
      renderers[key] = imageUrl
      palettes[key] = {
        url: imageUrl,
        type: type,
        group: group,
        name: name,
        title: title
      }
      incomings[key] = item.incoming
      outgoings[key] = item.outgoing
      types[type] = type
      groups[group] = group
    }
    const typeOptions = []
    for (const key in types) {
      const value = types[key]
      let label = '处理器'
      if (value === Constant.TYPE_SOURCE) {
        label = '源'
      } else if (value === Constant.TYPE_TARGET) {
        label = '目标'
      }
      typeOptions.push({ value: value, label: label })
    }
    const groupOptions = []
    for (const key in groups) {
      const value = groups[key]
      groupOptions.push({ value: value, label: value })
    }
    options.push({ value: 'Type', label: '类型', options: typeOptions })
    options.push({ value: 'Group', label: '分组', options: groupOptions })
  }).catch(() => {})

  // 获取Stage配置信息集
  PhuketApi.getConfigsAll().then(items => {
    console.log('getConfigsAll', items)
    configs = items
  }).catch(() => {})
}

/**
 * 获取配置信息
 *
 * @param {*} stageName
 */
export function getConfig(stageName) {
  return configs[stageName]
}

/**
 * 获取进度限制数
 *
 * @param {*} stageName
 */
export function getInLimit(stageName) {
  return incomings[stageName]
}

/**
 * 获取进度限制数
 *
 * @param {*} stageName
 */
export function getOutLimit(stageName) {
  return outgoings[stageName]
}

/**
 * 获取调色板信息
 *
 * @param {*} stageName
 */
export function getPalette(stageName) {
  return palettes[stageName]
}

/**
 * 获取调色板信息集合
 */
export function getPalettes() {
  return palettes
}

/**
 * 获取渲染信息
 *
 * @param {*} stageName
 */
export function getRenderer(stageName) {
  return renderers[stageName]
}

/**
 *  获取选择框信息集合
 */
export function getOptions() {
  return options
}

export default {
  init, getConfig, getInLimit, getOutLimit, getPalettes, getPalette, getRenderer, getOptions
}
